perm filename DERIV.BCH[TIM,LSP] blob
sn#666829 filedate 1982-07-06 generic text, type C, neo UTF8
COMMENT ā VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 Symbolic Derivative Benchmark
C00006 ENDMK
Cā;
Symbolic Derivative Benchmark
Here is a symbolic derivative benchmark that Vaughn Pratt wrote. It uses
a simple subset of Lisp and does a *lot* of CONSing. Below is the code
for that benchmark; please refer to it as DERIV:
(DECLARE (MAPEX T)) ;This makes MAPCAR open-code
(DEFUN DER1 (A) (LIST 'QUOTIENT (DERIV A) A))
(DEFUN DERIV (A)
(COND
((ATOM A)
(COND ((EQ A 'X) 1) (T 0)))
((EQ (CAR A) 'PLUS) (CONS 'PLUS (MAPCAR 'DERIV (CDR A))))
((EQ (CAR A) 'DIFFERENCE)
(CONS 'DIFFERENCE (MAPCAR 'DERIV
(CDR A))))
((EQ (CAR A) 'TIMES)
(LIST 'TIMES
A
(CONS 'PLUS (MAPCAR 'DER1 (CDR A)))))
((EQ (CAR A) 'QUOTIENT)
(LIST 'DIFFERENCE
(LIST 'QUOTIENT
(DERIV (CADR A))
(CADDR A))
(LIST 'QUOTIENT
(CADR A)
(LIST 'TIMES
(CADDR A)
(CADDR A)
(DERIV (CADDR A))))))
(T 'ERROR)))
(DEFUN RUN ()
(DECLARE (FIXNUM I)) ;Improves the code a little
(DO ((I 0 (1+ I)))
((= I 1000.)) ;Runs it 5000 times
(DERIV '(PLUS (TIMES 3 X X) (TIMES A X X) (TIMES B X) 5))
(DERIV '(PLUS (TIMES 3 X X) (TIMES A X X) (TIMES B X) 5))
(DERIV '(PLUS (TIMES 3 X X) (TIMES A X X) (TIMES B X) 5))
(DERIV '(PLUS (TIMES 3 X X) (TIMES A X X) (TIMES B X) 5))
(DERIV '(PLUS (TIMES 3 X X) (TIMES A X X) (TIMES B X) 5))))
Here is a sample run and some times from SAIL using MacLisp:
(fasload deriv)
(timit)
Timing performed on Tuesday 07/06/82 at 15:17:55.
Cpu Time = 2.091 ;CPU seconds
Elapsed Time = 152.083334 ;real time in seconds
Wholine Time = 38.55 ;CPU plus memory waits
GC Time = 19.436 ;GC time in seconds
Load Average Before = 1.4194169 ;SAIL load average
Load Average After = 3.0533738
Average Load Average = 2.23639536
The next 2 benchmarks will be variants of this.
-rpg-